package com.project.mapper;

import com.github.pagehelper.PageInfo;
import com.project.bean.StuBean;
import org.apache.ibatis.annotations.*;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface IStuMapper {
    /**
     * 通过学生姓名、班级名称、房间地址，动态条件查询学生信息。同时查询学生所在的班级名称和房间地址
     * @param stuName 学生姓名
     * @param className 班级名称
     * @param roomAddress 房间地址
     * @return 学生分页对象
     * 学生信息：学生编号、姓名、性别、班级名称、房间地址、电话
     */
    public List<StuBean> findByItem(@Param("stuName") String stuName,
                                    @Param("className") String className,
                                    @Param("roomAddress") String roomAddress);

    /**
     * 完成学生信息的添加
     * @param student 学生对象（学生姓名、性别、房间id、班级id、电话、头像）
     */
    @Insert("insert into t_stu (s_name,s_gender,s_header,s_inDate,s_tel,fk_classId,fk_roomId)" +
            "values (#{stuName},#{stuGender},#{stuPic},#{stuInDate},#{stuPhone},#{cls.classId},#{room.roomId})")
    public void addStudent(StuBean student);

    /**
     * 删除学生信息
     * @param stuId 学生id
     */
    @Delete("delete from t_stu where pk_studentId = #{id}")
    public void delStudent(Integer stuId);

    /**
     * 根据学生id查询学生信息，同时查询班级名称和房间地址
     * @param stuId 学生id
     * @return 学生对象
     * 学生信息：学生编号、姓名、性别、房间地址、班级名称、电话、头像、入住时间
     */
    public StuBean findById(Integer stuId);

    /**
     * 按学生id，修改房间外键
     * @param stuId 学生id
     * @param roomId 新房间id
     */
    @Update("update t_stu set fk_roomId = #{roomId} where pk_studentId = #{stuId}")
    public void updateStuRoom(@Param("stuId") Integer stuId, @Param("roomId") Integer roomId);

    /**
     * 按班级id统计班级中的学生人数（count（列名））。
     * @param id 班级id
     * @return 学生人数
     */
    @Select("select count(pk_studentId) from t_stu where fk_classId = #{id}")
    public Integer findStuNumById(Integer id);

    /**
     * 按房间的id统计学生人数
     * @param roomId 房间id
     * @return 学生人数
     */
    @Select("select count(pk_studentid) from t_stu where fk_roomId = #{id}")
    public Integer findStuNumByRoomId(Integer roomId);

}
